<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>name属性</title>
</head>
<body>
  <script>
    // 函数的name属性，返回该函数的函数名
    function foo () {}
    console.log(foo.name)// foo
    /**
     * 这个属性早就被浏览器广泛支持，但是直到ES6，才将其写入了标准。
     * 需要注意的是，es6对这个属性的行为做出了一些修改。如果一个匿名函数赋值给一个变量,es5的name属性会返回空字符串
     * 而es6的name属性会返回实际的函数名(被赋值的变量名)
     * 而当一个具名函数赋值给一个变量，es5和es6的name属性都返回这个具名函数的函数名
    */
    const bar = function baz() {};

    // ES5
    bar.name // "baz"

    // ES6
    bar.name // "baz"
    // Function 构造函数返回的函数实例，name属性的值为anonymous(匿名的)
    (new Function).name // anonymous
    // bind返回的函数，name属性值会加上bound前缀。
    function foo() {}
    foo.bind({}).name // "bound foo"
    (function() {}).bind({}).name // "bound"
  </script>
</body>
</html>